package com.xdcplus.web.service.bd;

import com.xdcplus.mp.service.BaseService;
import com.xdcplus.pager.vo.PageVO;
import com.xdcplus.web.common.pojo.dto.bd.BdPathDTO;
import com.xdcplus.web.common.pojo.dto.bd.BdPathFilterDTO;
import com.xdcplus.web.common.pojo.entity.bd.BdPath;
import com.xdcplus.web.common.pojo.vo.bd.BdOpeVO;
import com.xdcplus.web.common.pojo.vo.bd.BdPathDetailVO;
import com.xdcplus.web.common.pojo.vo.bd.BdPathVO;

import java.util.List;


/**
 * 工艺路线详细表(BdPath)表服务接口层
 *
 * @author Bullion.Yan
 * @since 2023-02-02 17:25:41
 */
public interface BdPathService extends BaseService<BdPath, BdPath, BdPathVO> {

    /**
     * 添加工艺路线详细表(BdPath)
     *
     * @param bdPathDTO 工艺路线详细表(BdPathDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveBdPath(BdPathDTO bdPathDTO);

    /**
     * 修改工艺路线详细表(BdPath)
     *
     * @param bdPathDTO 工艺路线详细表(BdPathDTO)
     * @return {@link Boolean} 是否成功
     */
    Boolean updateBdPath(BdPathDTO bdPathDTO);

    /**
     * 批量保存或更新工艺路线详细表(BdPath)
     *
     * @param bdPathList 工艺路线详细表(BdPathList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatch(List<BdPath> bdPathList);

    /**
     * 批量保存或更新工艺路线详细表(BdPathDTOList)
     *
     * @param bdPathDTOList 工艺路线详细表(BdPathDTOList)
     * @return {@link Boolean} 是否成功
     */
    Boolean saveOrUpdateBatchByDTOList(List<BdPathDTO> bdPathDTOList);

    /**
     * 删除工艺路线详细表(BdPath)
     *
     * @param id 工艺路线详细表(BdPath)主键
     * @return {@link Boolean} 是否成功
     */
    Boolean deleteBdPathLogical(Long id);
    
    Boolean deleteBdPathByIds(String ids);

    /**
     * 查询工艺路线详细表(BdPath)
     *
     * @param bdPathFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<BdPathVO>} 状态信息
     */
    List<BdPathVO> queryBdPathVOList(BdPathFilterDTO bdPathFilterDTO);

    /**
     * 查询工艺路线详细表(BdPath)
     *
     * @param bdPathFilterDTO 过程状态过滤DTO
     * @return {@link PageVO<BdPathVO>} 状态信息
     */
    PageVO<BdPathVO> queryBdPath(BdPathFilterDTO bdPathFilterDTO);

    /**
     * 查询一个
     *
     * @param id 工艺路线详细表(BdPath)主键
     * @return {@link BdPathVO} 工艺路线详细表(BdPath)信息
     */
    BdPathVO queryBdPathById(Long id);

    /**
     * 查询工艺路线ID查询工艺路线的工序信息
     * @param pathIdFk
     * @return
     */
    List<BdPathVO> findBdPathByIdPathIdFk(Long pathIdFk);

    /**
     * 通过工艺路线id获取详细的工艺信息(包含设备信息)
     * @param pathIdFk
     */
    List<BdPathDetailVO>   getPathDetailInfoByBdPathiId(Long pathIdFk);

    /**
     * 调整工艺路线目标工艺的位序
     * @param bdPathDTO
     */
    void updateBdPathSeq(BdPathDTO bdPathDTO);



    /**
     * 根据工艺路线Code及当前工序,查询下个工序
     * @param pathCode 工艺路线Code
     * @param crOpeCode 当前工序Code
     * @return
     */
    BdPath getBdPathByPathCodeAndCrOpeCode(String pathCode, String crOpeCode);

    /**
     * 根据工序路线及当前工序获取下一个工序
     * @param pathCode
     * @param opeCode
     * @return
     */
    String getNxOpeCodeByPathCodeAndCrOpeCode(String pathCode,String opeCode);

    List<BdOpeVO> queryOpeCodesForOpeCode(String opeCode);



}
